home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
util1
/
shell-10.lha
/
shell-1.0
/
src
/
util.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-12-07
|
2KB
|
129 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <exec/memory.h>
#include <dos/dostags.h>
#include <proto/exec.h>
#include <proto/dos.h>
int execute_command (int argc, char ** argv)
{
char * ptr, * buffer;
int len, t, status;
/* NOP ? */
if (!argc)
return 0;
/* Count size of commandline */
for (len=t=0; t<argc; t++)
len += strlen(argv[t])+3;
/* Allocate memory for it */
buffer = AllocMem (len+1, MEMF_ANY);
if (!buffer)
{
fprintf (stderr, "FOR: Cannot allocate memory (%d) to call a command\n",
len);
return 20;
}
/* fill it */
ptr = buffer;
for (t=0; t<argc; t++)
{
if (strchr (argv[t], ' ') || strchr (argv[t], '\t'))
{
*ptr ++ = '"';
strcpy(ptr, argv[t]);
ptr += strlen (ptr);
*ptr ++ = '"';
}
else
{
strcpy(ptr, argv[t]);
ptr += strlen (ptr);
}
*ptr ++ = ' ';
}
ptr[-1] = '\n';
*ptr = 0;
/* Call command */
status = SystemTags (buffer,
SYS_UserShell, TRUE,
TAG_END);
if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C)
{
Write (Output(), "***Break\n", 9);
status = 10;
}
/* Warnings don't count */
if (status == 5)
status = 0;
/* free memory */
FreeMem (buffer, len);
return status;
} /* execute_command */
#define BUFFERSIZE 256
char * replace_vars (char * str)
{
char * newstr;
int len;
char * ptr, * iptr;
char varname[64], * vptr;
char * varbuffer;
newstr = malloc (4096);
varbuffer = AllocMem (BUFFERSIZE, MEMF_ANY);
ptr=newstr;
for (iptr=str; *iptr; )
{
if (*iptr=='$')
{
vptr = varname;
iptr ++;
while (isalnum(*iptr))
*vptr ++ = *iptr ++;
*vptr = 0;
len = GetVar (varname, varbuffer, BUFFERSIZE-1, 0);
if (len != -1)
{
varbuffer[len] = 0;
strcpy (ptr, varbuffer);
ptr += len;
}
else
{
*ptr ++ = '$';
strcpy (ptr, varname);
ptr += strlen (ptr);
}
}
else
*ptr ++ = *iptr ++;
}
*ptr = 0;
FreeMem (varbuffer, BUFFERSIZE);
return newstr;
} /* replace_vars */